#ifndef USBTHREAD_H
#define USBTHREAD_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <sys/un.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <linux/types.h>
#include <linux/netlink.h>
#include <errno.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>


#define UEVENT_BUFFER_SIZE 2048

#include <QThread>
class MainWindow;
class USBThread : public QThread
{
    //Q_OBJECT
private:
    static int init_hotplug_sock()
    {
        struct sockaddr_nl snl;
        const int buffersize = 16 * 1024 * 1024;
        int retval;

        memset(&snl, 0x00, sizeof(struct sockaddr_nl));
        snl.nl_family = AF_NETLINK;
        snl.nl_pid = getpid();
        snl.nl_groups = 1;
        int hotplug_sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);

        if (hotplug_sock == -1) {
        printf("error getting socket: %s", strerror(errno));
        return -1;
        }


        setsockopt(hotplug_sock, SOL_SOCKET, SO_RCVBUFFORCE, &buffersize, sizeof(buffersize));
        retval = bind(hotplug_sock, (struct sockaddr *) &snl, sizeof(struct sockaddr_nl));

        if (retval < 0) {
        printf("bind failed: %s", strerror(errno));
        close(hotplug_sock);
        hotplug_sock = -1;
        return -1;
        }

        return hotplug_sock;
    };
public:
    USBThread(QObject* par);
    ~USBThread();
    void run();
private:
    MainWindow *dlg;
};

#endif // USBTHREAD_H
